#ifndef PICANIMATIONWID_H
#define PICANIMATIONWID_H

#include <QWidget>
#include<QPixmap>
#include<QTreeWidgetItem>
#include<QTimer>
///
/// 显示轮播图的类
/// \brief The PicAnimationWid class
///
class PicAnimationWid : public QWidget
{
    Q_OBJECT
public:
    explicit PicAnimationWid(QWidget *parent = 0);
    ~PicAnimationWid();
    void SetPixmap(QTreeWidgetItem* item);
    void Start();
protected:
    void paintEvent(QPaintEvent *event);
private:
//   用来控制图片从隐藏一点一点显示出来，即alpha分量的渲染
    float _factor;
//    定时器，控制轮播图速度
    QTimer* _timer;
//    双缓存绘图---实际上就是两张图片一起渲染，在前一张图片慢慢消失的同时，后一张图片慢慢显示出来，即同一帧是有两张图片在一起渲染的
    /*
     * 具体就是：
     * 比如现在是第一帧页面，第一张图片从完全显示，到慢慢透明，第二张图片从完全透明，到慢慢显示
     * 然后第二帧画面的时候：第二张图片从完全显示，到慢慢透明，第三张图片从完全透明，到慢慢显示【刚好第二张图片在第一帧结束的时候变成了完全显示，所以现在就可以从完全显示变成慢慢透明，不突兀】
    */
    QPixmap _pixmap1;
    QPixmap _pixmap2;
//    记录当前图片
    QTreeWidgetItem* _cur_item;
//    记录已经播放了哪些图片
    QMap<QString, QTreeWidgetItem*> _map_items;
    bool _b_start;
//    定时器循环时间
    int _timer_time = 25;

    void Stop();
    void UpSelectPixmap(QTreeWidgetItem *item);
signals:
    void SigUpPreList(QTreeWidgetItem* );
    void SigSelectItem(QTreeWidgetItem* );
    void SigStart();
    void SigStop();
    void SigStartMusic();
    void SigStopMusic();
public slots:
    void SlideNext();
    void SlidePre();
//    点击预览图显示成为大图
    void SlotUpSelectShow(QString path);

    void SlotStartOrStop();
private slots:
    void TimeOut();
};

#endif // PICANIMATIONWID_H
